package string;

/**
 * String不适合频繁修改。内存开销大，性能低下
 * 为了解决这个问题，Java提供了一个用于修改字符串的API:StringBuilder
 *
 * StringBuilder内部维护一个可变的char数组，修改性能高，开销小。并且提供了便于修改
 * 字符串的相关操作：增删改插等
 */
public class StringBuilderDemo {
    public static void main(String[] args) {
        String str = "好好学习java";
        //创建StringBuilder常见的构造器
        //StringBuilder builder = new StringBuilder();  //内部默认表示一个空字符串
        //创建StringBuilder的同时将给定的字符串内容复制一份到内部
        StringBuilder builder = new StringBuilder(str);
        //StringBuffer是并发安全的，StringBuilder不是并发安全的，功能上是一致的
        StringBuffer buffer = new StringBuffer(str);

        /*
        增
         */
        builder.append(",为了找个好工作！");
        System.out.println(str);//String是不变对象，内容没有发生改变
        System.out.println(builder);//改变的是StringBuilder内部字符串内容

        /*
        改
         */

        //将builder内部字符串从下标9到16（不含）的内容替换成给定的字符串
        builder.replace(9,16,"就是为了改变世界");
        System.out.println(builder);

        /*
        删
         */
        builder.delete(0,8);
        System.out.println(builder);

        /*
        插
         */
        //将给定内容插入到指定位置
        builder.insert(1,"活着");
        System.out.println(builder);

        //反转字符串内容
        builder.reverse();
        System.out.println(builder);

        /*

         */
        String line = builder.toString();
        System.out.println(line);
    }
}
